// let obj = {};

// 我们常用 interface 来定义一个接口 定义接口的时候，我们习惯首字母大写。
// interface IUser {
//     name: string
//     age: number
// }

// 定义接口 语法 interface 接口名 {}
// 接口名称尽量以大写的 I 开头
// 接口中的属性之间可以写分号 、逗号或者不写

// let obj: IUser;
// obj = {
//     name: "张三",
//     age: 18
// }



// 如果有一个对象，他有一个不确定属性名

// interface IUser {
//     name: string
//     age: number
//     gender?: string  // 定义可选属性
// }

// let obj: IUser = {
//     name: "张三",
//     age: 30,
//     gender: "80" // 使用接口的可选属性，来描述对象的可选属性
// }

// 在不确定对象的属性名的时候，用接口该怎么描述


interface IUser {
    name: string
    age: number
    gender?: string,
    [propName: string]: string | number | undefined | boolean  // 添加任意属性
    // [propName: string] 定义任意属性名，以及任意属性名的类型
}
// 特别注意：任意属性值的类型，必须是可选属性，必选属性值的类型的集合。


let obj: IUser = {
    name: "张三",
    age: 50,
    a: "wfw",
    b: 80,
    c: 100,
    d: undefined
}